#pragma once

#include "iostream"
#include "vector"
#include "algorithm"

using namespace std;
/*HJJ QQ479287006
 *请从字符串中找出一个最长的不包含重复字符的子字符串，计算该最长子字符串的长度。

 

示例 1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
     请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */

//他的编译器离谱的要命我建议刷体的时候开辟空间不需要节省 直接255
int lengthOfLongestSubstring(string s) {

    int temp[255] = {0};

    int max = 0;
    int startIndex = 0;
    //i 表示尾部指针
    for (int i = 0; i < s.size(); ++i) {

        while (temp[s[i]] >= 1) {
            --temp[s[startIndex++]];
        }

        if (temp[s[i]] == 0) {
            if (max < i - startIndex + 1)
                max = i - startIndex + 1;

            ++temp[s[i]];
        }

    }


    return max;
}